home *** CD-ROM | disk | FTP | other *** search
- #include <iostream.h>
- #include <dos.h>
- #include <stdlib.h>
-
- int rata[4]; //oh no variables globales, el principal pecado de la prog!!!
- //esto es un ejemplo, o sea que a callar.
-
- int crida=0;
- void ratapresent(); void estatrata(); void desinstala();
- void far cont();// función que usaremos como controlador
- void veurerata(); void instala();void convermickey(int,int);
-
- void ratapresent() // hacemos un reset de la rata
- {
- unsigned int present;
- asm{ // si hay una rata conectada, present será igual a FFFFh
- mov ax,00h // y a bx habrá el número de botones de la rata
- int 33h
- mov present,ax
- }
- if(present!=0xffff){cout << "rata no presente" ; exit(1); }
- }
-
- void veurerata()
- { // hacemos visible el cursor de la rata
- asm{
- mov ax,0001h
- int 33h
- } }
-
- void noveurerata()
- { // escondemos el cursor
- asm{
- mov ax,0002h
- int 33h
- }}
-
- void estatrata() // obtenemos posición de la rata y el estado de los botones
- {
- // por el método polling.
- _AX=0x03;
- asm{ int 33h};
- rata[0]=_CX;//posición X
- rata[1]=_DX; //posición Y
- rata[2]=_BX;// en BX está la información de los botones
- if(rata[2]==1){ rata[2]=1;rata[3]=0;}//botón izquierdo apretado
- if(rata[2]==2) {rata[2]=0;rata[3]=1; }// botón derecho
- if(rata[2]==3) {rata[2] =1;rata[3]=1;} // los dos
- convermickey(8,8); //pasamos de mickeys a coordenadas de modo texto
- }
-
- void convermickey(int relx,int rely)
- {
- rata[0]=rata[0]/relx;
- rata[1]=rata[1]/rely;
- }
-
- void instala()
- {
- asm {
- mov ax,0x0C
- mov cx,10 //llamaremos a la función siempre que apretemos 1 de los 2 botones
- mov bx,seg cont //nuestras variables sólo se actualizarán cuando apretemos
- mov es,bx //los botones
- mov dx, offset cont
- int 33h
- }
- }
-
- void desinstala()
- { //para desinstalar el controlador, hacemos como si lo instaláramos,
- asm { //pero poniendo en CX,0 es decir nunca llamará al controlador
- mov ax,0x0C
- mov cx,0
- mov bx,seg cont
- mov es,bx
- mov dx, offset cont
- int 33h
- }
- }
-
- void far cont()
- {
- if(crida) return;//si estamos dentro de la función no aceptamos más llamadas
- crida=1;//estamos dentro de la función
- _DS=FP_SEG(rata);//ponemos el valor necesario en DS para acceder a
- //nuestras variables. (sino DS apunta al segmento del controlador)
- rata[0]=_CX; //como en estatrata
- rata[1]=_DX;
- rata[2]=_BX;
- if(rata[2]==1){rata[2]=1;rata[3]=0;}
- if(rata[2]==2){rata[2]=0;rata[3]=1; }
- if(rata[2]==3){rata[2] =1;rata[3]=1;}
- convermickey(8,8);
- crida=0;//aceptamos más llamadas
- }
-
-
- main()
- {
- ratapresent();
- veurerata();
- instala();
- while(rata[3]!=1 || rata[2]!=1) // para salir tenemos que apretar los 2
- {//botones a la vez.
- //estatrata(); para hacerlo por el método de polling solo tendriamos.
- // que quitar las funciones instala,desinstala, cont, y poner esta.
- cout<<" posx = "<< rata[0]<< " posy = " << rata[1]<< " botó 1 "
- <<rata[2] <<" botó 2 " << rata[3] <<endl;
- }
- desinstala();
- noveurerata();
- return(0);
- }
-
- /* Fijaos que yo nunca llamó a la funció cont ,que es la que actualiza los
- valores, sino que es el driver del raton quién la llama, una vez la instalo. */
-
-